#include "backstage.h"

char buf[50];

void *readd(void *arg)
{
    char buff[50];
    bzero(buff, 50);
    while(1)
    {
        read(sockfd, buff, 50);
        printf("%s\n",buff);
        bzero(buff, 50);
    }
}

void *set_time(void *arg)
{
    while(1)
    {
        // 定义一个time_t类型的变量来存储当前时间  
        time_t rawtime;  
        
        // 使用time函数获取当前时间  
        time(&rawtime);  
        
        // 定义一个tm结构体指针来存储转换后的时间  
        struct tm * timeinfo;  
        
        // 使用localtime函数将time_t类型的时间转换为本地时间，并存储在tm结构体中  
        // 注意：localtime返回的是指向静态内存的指针，因此它不是线程安全的  
        // 在多线程程序中，应使用localtime_r函数  
        timeinfo = localtime(&rawtime);  
    
        // // 打印时间  
        // printf("当前时间: %d-%02d-%02d %02d:%02d:%02d\n",  
        //        timeinfo->tm_year + 1900, // 年份是从1900年开始计算的  
        //        timeinfo->tm_mon + 1,     // 月份是从0开始的  
        //        timeinfo->tm_mday,        // 日  
        //        timeinfo->tm_hour,        // 小时  
        //        timeinfo->tm_min,         // 分钟  
        //        timeinfo->tm_sec);        // 秒 

        snprintf(timenow, 50, "%d-%02d-%02d %02d:%02d:%02d", 
                    timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, 
                    timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);

        // printf("%s\n", timenow);
        sleep(1);
        snprintf(buf, 50, "4-%s", timenow);
        // printf("%s",buf);
        send(sockfd, &buf, sizeof(buf), 0);        
    }

}


void *backstage_TCP(void *arg)
{
    // 创建TCP
    sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    // 准备好开发板的地址
    struct sockaddr_in addr;
    socklen_t len = sizeof(addr);
    bzero(&addr, len);
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("192.168.11.182");//本机ubuntu"192.168.11.180",开发板"192.168.11.182"
    addr.sin_port = htons(50001);

    // 发起连接请求
    if((connect(sockfd, (struct sockaddr *)&addr, len)) != 0)
    {
        perror("connect 失败!");
        exit(0);
    }
    else
    {
        pthread_t b;
        pthread_create(&b, NULL, readd, NULL);     

        printf("connect succeed!\n");   

        char name[40];
        int option;         

        pthread_t time;
        pthread_create(&time, NULL, set_time, NULL);
        while(1)
        {
            bzero(buf, 50);
            bzero(name, 40);            
            printf("请选择:[1]添加患者\t[2]叫下一位\t[3]过号\n:");
            option = 3;
            if(scanf("%d", &option) != 1)
            {
                printf("请输入数字\n");
                while (getchar() != '\n');
                continue;
            }
            switch (option)
            {
            case 1:
                printf("患者姓名:");
                scanf("%s", name);
                snprintf(buf, 50, "1-%s", name);
                printf("%s\n", buf);
                int n;
                // n = write(sockfd, buf, strlen(buf));
                n = send(sockfd, &buf, sizeof(buf), 0);
                if(n <= 0)
                    perror("write 错误");
                break;
            case 2:
                strcpy(buf, "2-");
                // write(sockfd, buf, strlen(buf));
                printf("%s\n", buf);
                send(sockfd, &buf, sizeof(buf), 0);
                break;
            case 3:
                 strcpy(buf, "3-");
                // write(sockfd, buf, strlen(buf));
                printf("%s\n", buf);
                send(sockfd, &buf, sizeof(buf), 0);               
            default:
                printf("错误选项\n");
                break;
            }
        }        
    }
}

